package cn.edu.hyit.hjq.volunteems.backend.controller;

import cn.edu.hyit.hjq.volunteems.backend.dto.reault.JsonResult;
import cn.edu.hyit.hjq.volunteems.backend.pojo.Skill;
import cn.edu.hyit.hjq.volunteems.backend.service.SkillService;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 技能管理控制器
 *
 * @module 技能管理服务
 */
@RestController
@RequestMapping("/skills")
public class SkillController {

    private final SkillService skillService;

    public SkillController(SkillService skillService) {
        this.skillService = skillService;
    }

    /**
     * 创建新的技能
     * POST请求，接收Skill对象作为请求体，返回操作结果
     * @param skill 要创建的技能对象
     * @return JsonResult<Integer> 包含操作影响行数的结果对象
     */
    @PostMapping("/create")
    @PreAuthorize("hasRole('ADMIN')") // 只有 ADMIN 角色可以访问
    public JsonResult<Integer> createSkill(@RequestBody Skill skill) {
        int rowsAffected = skillService.insert(skill);
        return JsonResult.of(rowsAffected > 0 ? JsonResult.JsonResultCode.SUCCESS : JsonResult.JsonResultCode.FAIL, rowsAffected);
    }

    /**
     * 根据ID删除技能
     * DELETE请求，路径参数指定要删除的技能ID，返回操作结果
     * @param skillId 要删除的技能ID
     * @return JsonResult<Integer> 包含操作影响行数的结果对象
     */
    @DeleteMapping("delete/{skillId}")
    @PreAuthorize("hasRole('ADMIN')") // 只有 ADMIN 角色可以访问
    public JsonResult<Integer> deleteSkill(@PathVariable Integer skillId) {
        int rowsAffected = skillService.deleteById(skillId);
        return JsonResult.of(rowsAffected > 0 ? JsonResult.JsonResultCode.SUCCESS : JsonResult.JsonResultCode.FAIL, rowsAffected);
    }

    /**
     * 更新已有技能信息
     * PUT请求，接收Skill对象作为请求体，返回操作结果
     * @param skill 包含更新信息的技能对象
     * @return JsonResult<Integer> 包含操作影响行数的结果对象
     */
    @PutMapping("/update")
    @PreAuthorize("hasRole('ADMIN')") // 只有 ADMIN 角色可以访问
    public JsonResult<Integer> updateSkill(@RequestBody Skill skill) {
        int rowsAffected = skillService.update(skill);
        return JsonResult.of(rowsAffected > 0 ? JsonResult.JsonResultCode.SUCCESS : JsonResult.JsonResultCode.FAIL, rowsAffected);
    }

    /**
     * 获取指定ID的技能详情
     * GET请求，路径参数指定要查询的技能ID，返回技能信息
     * @param skillId 要查询的技能ID
     * @return JsonResult<Skill> 包含技能信息的结果对象
     */
    @GetMapping("get-by-id/{skillId}")
    public JsonResult<Skill> getSkillById(@PathVariable Integer skillId) {
        Skill skill = skillService.selectById(skillId);
       if (skill == null)
           return JsonResult.notFound("技能不存在");
       return JsonResult.success(skill);
    }

    /**
     * 获取所有技能列表
     * GET请求，无路径参数，返回所有技能列表
     * @return JsonResult<List<Skill>> 包含所有技能列表的结果对象
     */
    @GetMapping("/list")
    public JsonResult<List<Skill>> getAllSkills() {
        return JsonResult.success(skillService.selectAll());
    }
}